Yönetim Sözleşmeleri
TON'da, TVM, catchain, ücretler ve zincir topolojisi ile ilgili düğüm işletim konsensüs parametreleri (bu parametrelerin nasıl depolandığı ve güncellendiği dahil) bir dizi özel akıllı sözleşme tarafından kontrol edilmektedir. Bu parametrelerin sert kodlanmasının eski ve esnek olmayan yöntemlerinin aksine, TON kapsamlı ve şeffaf bir zincir içi yönetim uygular. Özel sözleşmeler seti, mevcut olarak Seçmen, Konfigürasyon ve DNS sözleşmelerini içerir ve gelecekte ekstra para birimi Üreticisi gibi diğerleriyle genişletilecektir.
Seçmen
Seçmen akıllı sözleşmesi, doğrulama turlarının birbirini nasıl değiştirdiğini, kimin blok zincirini doğrulama görevini alacağını ve doğrulama için ödüllerin nasıl dağıtılacağını kontrol eder. Eğer bir doğrulayıcı olmak ve Seçmen ile etkileşimde bulunmak istiyorsanız, :::tip doğrulayıcı talimatlarını kontrol edin.
Seçmen, credits
hashmap'inde geri çekilmeyen Toncoin verilerini, elect
hashmap'inde yeni başvuruları ve past_elections hashmap'inde önceki seçimlerle ilgili bilgileri saklar. Sonuncusu, doğrulayıcı kötü davranışları hakkında şikayetler içinde ve zaten bitmiş turlar için doğrulayıcının dondurulmuş stake'ları ile saklanır. Bu stake'lar stake_held_for
(ConfigParam 15) için tutulur. Seçmen sözleşmesinin üç amacı vardır:
- Doğrulayıcıların seçimi için başvuruları işlemek
- Seçimler düzenlemek
- Doğrulayıcı kötü davranış raporlarını işlemek
- Doğrulama ödüllerini dağıtmak
Başvuru İşleme
Bir başvuru oluşturmak için, gelecekteki bir doğrulayıcı, ilgili parametreleri (ADNL adresi, genel anahtar, max_factor
vb.) içeren özel bir mesaj oluşturmalı, bunu belirli bir TON miktarına (stake olarak adlandırılır) eklemeli ve Seçmen'e göndermelidir. Seçmen, bu parametreleri kontrol eder ve ya bir başvuruyu kaydeder ya da hemen stake'i gönderen kişiye geri döner. Başvuruların yalnızca masterchain üzerindeki adreslerden kabul edildiğini unutmayın.
Seçim Yapma
Seçmen, her blokta zorunlu olarak çağrılabilen özel bir akıllı sözleşmedir (sözde Tick ve Tock işlemleri). Gerçekten de, Seçmen her blokta çağrılır ve yeni bir seçim yapmanın zamanı olup olmadığını kontrol eder.
Seçim sürecinin genel konsepti, tüm başvuruları, özellikle TON miktarını ve max_factor
'ı dikkate alarak ve her doğrulayıcıya, TON miktarına orantılı olarak ama tüm max_factor
koşullarının karşılandığı şekilde ağırlık vermektir.
Bu, teknik olarak şu şekilde uygulanır:
- Seçmen, stake miktarı mevcut ağ minimumu
min_stake
'in (ConfigParam 17) üzerinde olan tüm başvuruları alır. - Bunları azalan sırayla stake miktarına göre sıralar.
- Katılımcı sayısı maksimum doğrulayıcı sayısından (
max_validators
ConfigParam 16) fazla ise, listenin sonunu atar. i
döngüsü 1'denN
'ye (kalan katılımcı sayısı).- Listeden (azalan sırada sıralanmış) ilk
i
elemanı al - i-inci adayın son kabul edilen olacağını varsay (ve dolayısıyla en düşük ağırlığa sahip olacak) ve
max_factor
ile ilgili olarak etkili stake (true_stake
kodda) hesapla. - Başka bir deyişle, j-inci (
j<i
) başvuranın etkili stake'imin(stake[i]*max_factor[j], stake[j])
olarak hesaplanır. - 1'den i-inci katılımcılara kadar toplam etkili stake'i (TES) hesapla. Eğer bu TES, daha önce bilinen maksimum TES'ten yüksekse, o zaman bu mevcut en iyi ağırlık konfigürasyonu olarak kabul edilir.
- Listeden (azalan sırada sıralanmış) ilk
- Mevcut en iyi konfigürasyonu al, yani maksimum stake’i kullanan ağırlık konfigürasyonunu al ve bunu yeni doğrulayıcı seti olarak konfigürasyon sözleşmesine (Konfigürasyon sözleşmesi, aşağıya bakınız) gönder.
- Doğrulayıcı olmayan başvuranlardan gelen ve fazla olan kullanılamayan stake'leri
credits
tablosuna koy, bu tablodan başvuranlar tarafından istenebilir.
Bu şekilde, dokuz adayın 100.000 stake ve 2.7 faktörü varsa ve bir katılımcının 10.000 stake'i varsa, son katılımcı seçilmeyecektir: Onun olmaması durumunda, etkili stake 900.000 olacak, ancak onunla birlikte sadece 9 27.000 + 10.000 = 253.000 olacak. Buna karşın, eğer bir aday 100.000 ve 2.7 faktörü ile ve dokuz katılımcı 10.000 stake'i varsa, hepsi doğrulayıcı olur. Ancak, ilk aday sadece 102.7 = 27.000 TON stake yapacak ve artan 73.000 TON credits
'e gidecektir.
Seçim sonuçları için bazı sınırlamalar vardır (açıkça TON konfigürasyon parametreleri tarafından kontrol edilen) özellikle min_validators
, max_validators
(ConfigParam 16), min_stake
, max_stake
, min_total_stake
, max_stake_factor
(ConfigParam 17). Eğer mevcut başvurularla bu koşulları karşılama yolu yoksa, seçimler ertelenecektir.
Doğrulayıcı kötü davranışlarını raporlama süreci
Her doğrulayıcı, zaman zaman yeni bir blok oluşturması için rastgele atanır (eğer doğrulayıcı birkaç saniye içinde başarısız olursa, bu görev bir sonraki doğrulayıcıya geçer). Böyle atamaların sıklığı doğrulayıcının ağırlığı ile belirlenir. Bu nedenle, herkes önceki doğrulama turundan blokları alabilir ve üretilen blokların beklenen sayısının gerçek blok sayısına yakın olup olmadığını kontrol edebilir. İstatistiksel olarak önemli bir sapma, üretim blok sayısının beklenenden az olması, bir doğrulayıcının kötü davrandığı anlamına gelir. TON üzerinde, kötü davranışı kanıtlamak Merkle kanıtları kullanarak oldukça kolaydır. Seçmen sözleşmesi, saklanması için ödeme yapmaya hazır olan herkesten böyle bir kanıtı kabul eder ve şikayeti kaydeder. Ardından, mevcut turdaki her doğrulayıcı şikayeti kontrol eder ve eğer doğruysa ve önerilen ceza kötü davranışın ciddiyeti ile uyumluysa, ona oy verir. Ağırlık açısından 2/3’ten fazla oy aldığında, şikayet kabul edilir ve ceza past_elections
'ın ilgili elemanının frozen
hashmap'inden ayrılır.
Doğrulama ödüllerinin dağıtımı
Yeni seçim yapmanın zamanı olup olmadığını kontrol etmekle aynı şekilde, Seçmen her blokta past_elections
için frozen
'den fonların serbest bırakılması zamanının gelip gelmediğini kontrol eder. İlgili blokta, Seçmen, ilgili doğrulama turlarından (gaz ücretleri ve blok oluşturma ödülleri) toplanan kazançları, o turun doğrulayıcılarına doğrulayıcı ağırlıklarına orantılı olarak dağıtır. Sonrasında, ödüllerle birlikte stake'ler credits
tablosuna eklenir ve seçim past_elections
tablosundan kaldırılır.
Seçmen'in mevcut durumu
Mevcut durumu :::info dapp üzerinden kontrol edebilirsiniz; bu, seçim katılımcılarını, kilitli stake'leri, çekilmeye hazır fonları, şikayetleri vb. görmeyi sağlar.
Konfigürasyon
Konfigürasyon akıllı sözleşmesi TON konfigürasyon parametrelerini kontrol eder. Mantığı, bazı parametreleri değiştirme iznine kimin sahip olduğunu ve hangi koşullar altında bunu yapabileceğini belirler. Ayrıca bir öneri/oylama mekanizması ve doğrulayıcı setinin döngüsel güncellemelerini de gerçekleştirir.
Doğrulayıcı seti döngüsel güncellemeleri
Konfigürasyon sözleşmesi, Seçmen sözleşmesinden yeni bir doğrulayıcı setinin seçildiğine dair özel bir mesaj aldığında, ConfigParam 36'ya (bir sonraki doğrulayıcılar) yeni bir doğrulayıcı seti koyar. Daha sonra, TickTock işlemleri sırasında her blokta, konfigürasyon sözleşmesi yeni doğrulayıcı setini uygulama zamanının gelip gelmediğini kontrol eder (zaman utime_since
, doğrulayıcı setinin kendisine gömülüdür) ve geçmiş seti ConfigParam 34'ten (mevcut doğrulayıcılar) ConfigParam 32'ye (geçmiş doğrulayıcılar) taşır ve ConfigParam 36'dan gelen seti ConfigParam 34'e ayarlar.
Öneri/oylama mekanizması
Öneri saklama ücreti ödemeye hazır olan herkes, ilgili mesajları Konfigürasyon sözleşmesine göndererek bir veya daha fazla konfigürasyon parametresinin değişikliğini önerebilir. Karşılığında, mevcut set içindeki herhangi bir doğrulayıcı, kendi özel anahtarıyla bir onay mesajı imzalayarak bu öneriye oy verebilir. Unutmayın: ilgili genel anahtar ConfigParam 34'te saklanmaktadır. 3/4 oy alındığında veya alınmadığında (doğrulayıcıların ağırlığına göre), öneri turu kazanır veya kaybeder. Kritik bir tur sayısı kazanıldığında (min_wins
ConfigParam 11), öneri kabul edilir; kritik bir tur sayısı kaybedildiyse (max_losses
ConfigParam 11), öneri reddedilir. Bazı parametrelerin kritik olarak kabul edildiğini unutmayın (kritik parametre seti kendisi bir konfigürasyon parametresidir, ConfigParam 10) ve bu nedenle kabul edilmesi için daha fazla tura ihtiyaç vardır.
Acil durum güncellemeleri için -999
, -1000
, -1001
konfigürasyon parametreleri için oylama yapılması için ayrılmıştır. Karşılık gelen indekslerle önerinin yeterli oy alması durumunda, Acil durum anahtarı, Konfigürasyon sözleşmesinin ya da Seçmen sözleşmesinin kodunu günceller.
Acil Durum Güncellemesi
Doğrulayıcılar, oylama mekanizması aracılığıyla yapılamadığında konfigürasyon parametrelerini güncellemek için özel bir genel anahtar atamak için oy kullanabilirler. Bu, ağın aktif gelişimi sırasında gerekli olan geçici bir önlemdir. Ağ olgunlaştıkça, bu önlemin sona ermesi beklenmektedir. Geliştirildikten ve test edildikten sonra, anahtar çok imzalı bir çözüme aktarılacaktır. Ve ağ kararlılığını kanıtladığında, acil durum mekanizması tamamen kaldırılacaktır.
Doğrulayıcılar, bu anahtarı TON Vakfı'na atamak için Temmuz 2021'de oy verdiler (masterchain bloğu 12958364
). Böyle bir anahtarın yalnızca konfigürasyon güncellemelerini hızlandırmak için kullanılabileceğini unutmayın. Hiçbir sözleşmenin koduna, depolamasına veya bakiyesine müdahale edemez.
Acil durum güncellemelerinin geçmişi:
17 Nisan 2022'de, seçim için başvuru sayısı o kadar arttı ki, o an gaz sınırları dâhilinde seçim yapılamadı. Özellikle, seçimler 10 milyon gaz gerektirirken, blok
soft_limit
vehard_limit
sırasıyla10m
ve20m
olarak ayarlanmıştı (ConfigParam 22);special_gas_limit
veblock_gas_limit
sırasıyla10m
ve10m
olarak ayarlanmıştı (ConfigParam 20). Bu nedenle, yeni doğrulayıcılar belirlenemedi ve blok gaz limitinin aşılması nedeniyle, masterchain üzerindeki dahili mesajları işleyen işlemler bloğa dahil edilemedi. Sonuç olarak, konfigürasyon güncellemeleri için oy kullanmanın imkânsız hale gelmesi durumu oluştu. Acil durum anahtarı, ConfigParam 22soft_limit
'i22m
vehard_limit
'i25m
(blok19880281
) olarak güncellemek için kullanıldı ve ConfigParam 20special_gas_limit
'i20m
veblock_gas_limit
'i22m
(blok19880300
) olarak güncelledi. Sonuç olarak, seçim başarılı bir şekilde gerçekleştirildi; sonraki blok10 001 444
gaz tüketti. Seçimlerin toplam ertelenmesi süresi yaklaşık 6 saatti ve temel zincirin işlevselliği etkilenmedi.2 Mart 2023'te, seçim için başvuru sayısı yeterince büyüdü ki,
20m
gaz seçim gerçekleştirmek için yeterli olmadı. Ancak bu sefer masterchain, daha yüksekhard_limit
nedeniyle dış mesajları işlemeye devam etti. Acil durum anahtarı, ConfigParam 20special_gas_limit
'i25m
veblock_gas_limit
'i27m
(blok27747086
) olarak güncellemek için kullanıldı. Sonuç olarak, bir sonraki blokta seçim başarıyla gerçekleştirildi. Seçimlerin toplam ertelenme süresi yaklaşık 6 saatti; buna ek olarak, hem master zincirin hem de temel zincirin işlevselliği etkilenmedi.22 Kasım 2023'te, anahtar kendini terk etti (blok
34312810
). Sonuç olarak, genel anahtar 32 sıfır bayt ile değiştirildi.Ed25519 imza doğrulamasının OpenSSL implementasyonuna geçiş nedeniyle, genel anahtarın tüm baytlarının aynı olduğu özel durumu kontrolü devre dışı bırakıldı. Bu nedenle, sıfır genel anahtarına karşı kontrol, beklendiği gibi çalışmadı. Bu sorunu kullanarak, acil durum anahtarı 9 Aralık'ta güncellendi (blok
34665437
, tx) sıfırdan bir şey yok-byte_dizisine82b17caadb303d53c3286c06a6e1affc517d1bc1d3ef2e4489d18b873f5d7cd1
olarak; busha256("Not a valid curve point")
'tir. Artık, ağ konfigürasyon parametrelerinin güncellenmesinin tek yolu doğrulayıcı konsensüsüdür.
Ayrıca Bakınız
Önceden Derlenmiş Sözleşmeler